package edu.cuit.avatar.map;

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;

/**
 * 统计指定文章中每个单词出现的次数
 *  Map<String, Integer>
 * @author <a href="mailto:1020zhaodan@163.com">Adan</a>
 * @version 1.0
 * @date 2025/7/15 14:01
 */
public class HashMapDemo {
    public static Map<String, Integer> statistics(String fileName){
        Map<String, Integer> map = new HashMap<>();
        //读取文章
        try(var input = new BufferedReader(new FileReader(fileName))) {
           //逐行读取
           String line = null;
           while((line = input.readLine()) != null){
               //分割出该行的所有的单词
               String[] words = line.split("\\W");
               for(var word : words){
                   //计算当前单词的出现次数
//                   int count = 1;
//                   if(map.containsKey(word))
//                       count = map.get(word) + 1;
                   int count = map.getOrDefault(word, 0) + 1;
                   map.put(word, count);
               }
           }
        } catch (IOException e){
            e.printStackTrace();
        }

        return map;
    }

    public static void each(Map<?, ?> map){
        /*
         * 迭代map的几种方式
         * 1.可以获取所有的key,根据key进行迭代
         * 2.直接获取map中所有的value
         * 3.迭代所有的条目entry
         * 4.map提供的forEach
         */
//        var keys = map.keySet();
//        for(var key : keys)
//            System.out.println(key + ":" + map.get(key));
//        System.out.println("=======================================");
//        var values = map.values();
//        for(var value : values)
//            System.out.println(value);
//        System.out.println("=======================================");
//        Set<? extends Map.Entry<?, ?>> entries = map.entrySet();
//        for(var entry : entries)
//            System.out.println(entry.getKey() + ":" + entry.getValue());
//        System.out.println("=======================================");

        map.forEach((k, v) ->System.out.println(k + ":" + v));
    }

    public static void main(String[] args) {
        each(statistics("D:/chapter1.txt"));
    }
}
